

/*     Programa que simula el funcionamiento del FSW en modo de monitoreo para obtener los datos
       de la una memoria EEPROM    */

#include <Wire.h>     
       
       
HardwareSerial Uart = HardwareSerial();
char SerialByte = 0;
char I2CByte = 0;

char enableRead = 0;

char EepromAddress = 0x50;

void setup(){
  
    //Serial.begin(9600);

    // Inicializar puerto UART
    Uart.begin(9600);
    // Inicializar bus I2C como maestro
    Wire.begin();
    

}


void loop(){
    int counter = 0;
  
    // Verificar si hay datos disponibles
    if(Uart.available() > 0 ){
      
        SerialByte = Uart.read();
        switch (SerialByte){
            
            case 'M':
                enableRead = 1;
                
                break;
            case 'O':
                if(enableRead){
                    
                    direccionarMemoria(0);
                    
                    for(counter = 0; counter <= 0x3FFF; counter ++){
                        // Leer un byte de memoria
                        Wire.requestFrom(EepromAddress,1);
                        // Esperar a recibir el byte
                        while(! (Wire.available()));
                        // Recibir el byte
                        if(Wire.available()){
                            I2CByte = Wire.receive();
                        }
                        //Enviar por UART
                        Uart.write(I2CByte);                      
                    }         
                }
                break;
            default:
                break;    
        }    
    }
}

void direccionarMemoria(char address){
  
    Wire.beginTransmission(EepromAddress);
    Wire.send(address);
    Wire.endTransmission();    
    

    

}
